diff options
Diffstat (limited to 'app/[lng]/partners/pq/page.tsx')
| -rw-r--r-- | app/[lng]/partners/pq/page.tsx | 91 |
1 files changed, 25 insertions, 66 deletions
diff --git a/app/[lng]/partners/pq/page.tsx b/app/[lng]/partners/pq/page.tsx index 42c88b21..08faeebb 100644 --- a/app/[lng]/partners/pq/page.tsx +++ b/app/[lng]/partners/pq/page.tsx @@ -1,85 +1,44 @@ import { getServerSession } from "next-auth" import { authOptions } from "@/app/api/auth/[...nextauth]/route" -import * as React from "react" -import { Shell } from "@/components/shell" -import { Skeleton } from "@/components/ui/skeleton" import { getPQDataByVendorId, getPQProjectsByVendorId } from "@/lib/pq/service" -import { PQInputTabs } from "@/components/pq/pq-input-tabs" -import { Tabs, TabsList, TabsTrigger } from "@/components/ui/tabs" +import { ClientPQWrapper } from "@/components/pq/client-pq-input-wrapper" +import { unstable_noStore as noStore } from 'next/cache' +// 페이지가 기본적으로 동적임을 나타냄 +export const dynamic = "force-dynamic" export default async function PQInputPage({ - searchParams + searchParams, }: { searchParams: { projectId?: string } }) { + // Opt out of caching for this route + noStore() + // 세션 const session = await getServerSession(authOptions) // 예: 세션에서 vendorId 가져오기 // const vendorId = session?.user.companyId const vendorId = 17 // 임시 const idAsNumber = Number(vendorId) - - const projectId = searchParams.projectId ? parseInt(searchParams.projectId, 10) : undefined - - // 벤더에게 요청된 프로젝트 PQ 목록 가져오기 (탭 표시용) + + // 서버에서는 모든 데이터를 가져오고, 프로젝트 필터링은 클라이언트에서 진행 const projectPQs = await getPQProjectsByVendorId(idAsNumber) - - // PQ 데이터 조회 - const pqData = await getPQDataByVendorId(idAsNumber, projectId) - - // 현재 프로젝트 정보 (있다면) - const currentProject = projectId - ? projectPQs.find(p => p.projectId === projectId) - : null - + + // 두 가지 방법으로 수정할 수 있습니다: + + // 방법 1: 먼저 allPQData 데이터를 projectId 없이 가져오기 + const allPQData = await getPQDataByVendorId(idAsNumber, undefined) + + // 방법 2: rawProjectId를 클라이언트로 전달하고, 클라이언트가 필터링을 처리 + + // 클라이언트 컴포넌트로 데이터와 원시 searchParams 전달 return ( - <Shell className="gap-2"> - {/* 헤더 - 프로젝트 정보 포함 */} - <div className="space-y-2"> - <h2 className="text-2xl font-bold tracking-tight"> - Pre-Qualification Check Sheet - {currentProject && ( - <span className="ml-2 text-muted-foreground"> - - {currentProject.projectCode} - </span> - )} - </h2> - <p className="text-muted-foreground"> - PQ에 적절한 응답을 제출하시기 바랍니다. - </p> - </div> - - {/* 일반/프로젝트 PQ 선택 탭 */} - {projectPQs.length > 0 && ( - <div className="border-b"> - <Tabs defaultValue={projectId ? `project-${projectId}` : "general"}> - <TabsList> - <TabsTrigger value="general" asChild> - <a href="/partners/pq">일반 PQ</a> - </TabsTrigger> - - {projectPQs.map(project => ( - <TabsTrigger key={project.projectId} value={`project-${project.projectId}`} asChild> - <a href={`/partners/pq?projectId=${project.projectId}`}> - {project.projectCode} - </a> - </TabsTrigger> - ))} - </TabsList> - </Tabs> - </div> - )} - - {/* PQ 입력 탭 */} - <React.Suspense fallback={<Skeleton className="h-7 w-52" />}> - <PQInputTabs - data={pqData} - vendorId={idAsNumber} - projectId={projectId} - projectData={currentProject} - /> - </React.Suspense> - </Shell> + <ClientPQWrapper + allPQData={allPQData} + projectPQs={projectPQs} + vendorId={idAsNumber} + rawSearchParams={searchParams} + /> ) }
\ No newline at end of file |
